#include <buola/gui/czoomhelper.h>

#include <buola/image/cgc.h>

namespace buola { namespace gui {

CZoomHelper::CZoomHelper()
    :	mZoom(1.0),
        mPan(0,0)
{}

void CZoomHelper::Zoom(double pFactor,const CPoint_d &pOrigin)
{
    mZoom*=pFactor;
    mPan-=(pOrigin-mPan)*(pFactor-1.0);

    sChanged();
}

void CZoomHelper::Pan(const CPoint_d &pPan)
{
    mPan+=pPan;
    
    sChanged();
}

void CZoomHelper::One()
{
    mZoom=1.0;
    mPan={0,0};
    
    sChanged();
}

void CZoomHelper::Fit(const CRect_d &pWin,const CRect_d &pRect)
{
    mZoom=std::min(pWin.w()/pRect.w(),pWin.h()/pRect.h());
    mPan={0,0};
    
    sChanged();
}

void CZoomHelper::Apply(img::CGC *pGC)
{
    pGC->Translate(mPan);
    pGC->Scale(CSize_d(mZoom));
}

void CZoomHelper::ApplyInverse(img::CGC *pGC)
{
    pGC->Translate(mPan);
    pGC->Scale(CSize_d(mZoom));
}

/*namespace gui*/ } /*namespace buola*/ }
